package de.jmda.gen;

import java.util.List;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;

/**
 * {@link CompoundGenerator}s use {@link Generator} components (see {@link
 * #getGeneratorComponents()}) to assemble the overall result of {@link
 * #generate()}.
 * <p>
 * Implementations are expected to take care of the correct order in which
 * compound generators provide their parts of the overall generation result in
 * {@link #getGeneratorComponents()}.
 */
public interface CompoundGenerator extends Generator
{
	/**
	 * @return generator components that are known to the compound generator
	 *         implementation
	 */
	@NotNull
	@Valid
	List<Generator> getGeneratorComponents();

	/**
	 * @return String used to separate the generator components in {@link
	 *         #generate()}
	 */
	String getComponentSeparator();
}